package com.ht.api.call.func.impl.link;

import javax.sql.DataSource;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 创建短链的前置函数
 * @author asq
 * @createTime 2025年1月13日 22:19:08
 */
@Slf4j
public class ShortLinkAddFunctionCall implements IFunctionCall {

	@Override
	public String getName() {
		return "创建短链的前置函数";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取随机字符串
		String code = getRandomCode(me.getDataSource());

		// 写进参数中
		param.set("code", code);
		
		return JSONUtil.createObj();
	}
	
	/**
	 * 生成一个随机code，并确保此code在short_link表中不存在
	 * @param ds 数据源
	 * @return
	 */
	private String getRandomCode(DataSource ds) {
		String code = RandomUtil.randomString(5);
		
		// 查询数据库，如果存在，则递归操作
		boolean exists = Db.createSqlParser("short_link").where("code", code).hasRow(ds);
		if (exists) {
			return getRandomCode(ds);
		}
		
		return code;
	}
}
